home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 10 / 9 / DISK1095.ZIP / CUSTMNT.PRG < prev    next >
Text File  |  1986-10-07  |  8KB  |  244 lines

  1. * CUSTMNT
  2. * CUSTOMER INFORMATION SYSTEM FILE MAINTENANCE PROGRAM
  3. *
  4. SET HEADING OFF
  5. SET SAFETY OFF
  6. SET STATUS OFF
  7. CLEAR
  8. CLEAR ALL
  9. SET TALK OFF
  10. SET BELL OFF
  11. * DEFINE A STRING OF BLANKS
  12. STORE SPACE(80) TO BLANK
  13. * CLEAR REQUEST AND ACTION CONTROL VARIABLES
  14. STORE " " TO REQUEST
  15. STORE " " TO ACTION
  16. STORE "N" TO DATAIN
  17. STORE 0 TO RECCNT
  18. *
  19. *===============================START MODS: 1================================*
  20. * SET NAME OF FILE                                                           *
  21. STORE "CUSTOMER" TO FILENAME
  22. * SETUP COUNT OF INDEXES FOR THE FILE filename
  23. STORE 3 TO IXCOUNT
  24. * SETUP CONSTANTS CONTAINING INDEXES IN SEQUENCE TO USE IN MACRO LATER.
  25. * LIST EACH INDEX FIRST AS A PRIMARY INDEX. VARIABLES NAMED IXA, IXB, IXC, ETC.
  26. STORE "NAME,COMPANY,ZIP" TO IXA
  27. * DEFINE KEYS FOR INDEX. IF NUMERIC, MUST CONVERT WITH STR(). USE DI+IXA, ETC.
  28. STORE 'LAST_NAME-","-FIRST_NAME'TO DIIXA
  29. STORE "COMPANY,NAME,ZIP" TO IXB
  30. STORE "COMPANY" TO DIIXB
  31. STORE "ZIP,NAME,COMPANY" TO IXC
  32. STORE "STR(ZIP,5,0)" TO DIIXC
  33. *==================================END MODS==================================*
  34. *
  35. * SAVE NAME OF MACRO WHICH CONTAINS ACTIVE INDEX AS FIRST INDEX
  36. STORE "IXA" TO LIVE_IX
  37. * FIND RECORD COUNT
  38. USE &FILENAME
  39. COUNT TO RECCNT
  40. * IF DBF FILE HAS NO RECORDS THIS CONDITION PREVENTS 'RECORD OUT OF RANGE'
  41. * ERROR FROM OCCURING WHEN ADD OPTION IS CHOSEN.
  42. IF RECCNT = 1
  43.    RECCNT = RECCNT-1
  44. ENDIF
  45. * IF FILE HAS NO RECORD, ASSUME INDEXES NOT CREATED AND CREATE THEM
  46.    IF RECCNT = 0 .AND. IXCOUNT>0
  47.    STORE 1 TO COUNT
  48.    DO WHILE COUNT<=IXCOUNT
  49.       STORE "IX"+CHR(64+COUNT) TO TEMP
  50.       STORE "DI"+TEMP TO TEMP2
  51.       IF IXCOUNT>1
  52.          STORE SUBSTR(&TEMP,1,AT(",",&TEMP)-1) TO TEMP
  53.       ELSE
  54.          STORE &TEMP TO TEMP
  55.       ENDIF
  56.       STORE &TEMP2 TO TEMP2
  57.       INDEX ON &TEMP2 TO &TEMP
  58.       STORE COUNT+1 TO COUNT
  59.    ENDDO
  60.   ENDIF
  61. * ADD INDEXES
  62. SET INDEX TO &IXA
  63. * POSITION AT FIRST RECORD IN LIVE INDEX SEQUENCE FOR INITIAL DISPLAY
  64. GO TOP
  65. *
  66. * MAIN UPDATE LOOP. TERMINATED BY 'M' AS REQUEST
  67. DO WHILE REQUEST<>"M"
  68. *
  69. *===============================START MODS: 2================================*
  70. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  71.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  72.    @ 3,15 SAY ">> Customer Information System File Maintenance <<"
  73.    @ 5,17 SAY "Today's Date:"
  74.    ?? DATE()
  75. * SETUP VARIABLE PART OF MASK
  76.    CLEAR GETS
  77.    @ 7,1  SAY "Name -- Last " GET LAST_NAME
  78.    @ 7,38 SAY "First " GET FIRST_NAME
  79.    @ 7,63 SAY "Initial " GET INITIAL
  80.    @ 9,1  SAY "Title   " GET TITLE
  81.    @ 9,40  SAY "Company " GET COMPANY
  82.    @ 11,1 SAY "Street  " GET STREET
  83.    @ 11,36 SAY "City " GET CITY
  84.    @ 11,58 SAY "State " GET STATE
  85.    @ 11,69 SAY "Zip " GET ZIP RANGE 0,99999
  86.    @ 13,1 SAY "Purchase Codes -- 1 " GET MTYPE_1
  87.    @ 13,30 SAY "2 " GET MTYPE_2
  88.    @ 13,41 SAY "3 " GET MTYPE_3
  89.    @ 15,1 SAY "Last Buy " GET LAST_PURCH PICTURE "99/99/99"
  90.    @ 15,21 SAY "Value This Year " GET YRS_VALUE
  91.    @ 15,49 SAY "Value Last Year " GET LYRS_VALUE
  92. * DATE OF LAST UPDATE SHOULD BE ONE OF THE FIELDS (LAST_UPDT)
  93.    @ 17,1 SAY "Last Updated : "
  94.    ?? LAST_UPDT
  95. *==================================END MODS==================================*
  96. *
  97. * DISPLAY VARIABLE DATA IN SCREEN HEADING
  98.    IF DELETE()
  99.       @ 5,1 SAY "* DELETED *"
  100.    ELSE
  101.       @ 5,1 SAY "           "
  102.    ENDIF
  103. * IDENTIFY RECORD
  104.    @ 5,62 SAY RECCNT
  105.    @ 5,50 SAY RECNO()
  106.    @ 5,43 SAY "Record"
  107.    @ 5,61 SAY "of"
  108. * IF DATAIN FLAG SET, ACTIVATE THE GETS
  109.    IF DATAIN="Y"
  110.       @ 19,72 GET ACTION
  111.       READ
  112. * DATE STAMP RECORD
  113.       REPLACE LAST_UPDT WITH DATE()
  114.       IF REQUEST="E".OR.ACTION<>"C"
  115.          STORE "N" TO DATAIN
  116.          STORE " " TO REQUEST
  117.          STORE " " TO ACTION
  118.       ENDIF 2
  119.    ELSE
  120.       CLEAR GETS
  121.    ENDIF 1
  122. *
  123. * DISPLAY CONTROL SUBMENU, CURRENT ACTIVE INDEX
  124.    @ 19,0 SAY BLANK
  125.    @ 20,0 SAY "----------------------------------------"
  126.    @ 20,40 SAY "----------------------------------------"
  127.    @ 21,0 CLEAR
  128.    @ 21,2 SAY ;
  129. "<F>ind Record  <A>dd Record   <D>elete/Recall  <E>dit Record   Current Active"
  130.    @ 22,2 SAY ;
  131. "<P>rev Record  <N>ext Record  <M>enu (return)  <K>ey Select    Key:          "
  132. * IF INDEX SET NAMED IN LIVE_IX HAS MULTIPLE ENTRIES, EXTRACT FIRST
  133.    IF (","$&LIVE_IX)
  134.       STORE SUBSTR(&LIVE_IX,1,AT(",",&LIVE_IX)-1) TO TEMP
  135.       @ 22,70 SAY TEMP
  136.    ELSE
  137.       @ 22,70 SAY &LIVE_IX
  138.    ENDIF
  139. * GET REQUEST AND FORCE TO UPPER CASE UNLESS ALREADY IN 'A' FOR ADD RECORDS
  140.    IF REQUEST<>"A"
  141.       STORE " " TO REQUEST
  142.       STORE " " TO ACTION
  143.       @ 24,10 SAY "          *** NEXT ACTION TO PERFORM " GET REQUEST
  144.       READ
  145.       STORE UPPER(REQUEST) TO REQUEST
  146.    ENDIF
  147. * CLEAR ADD RECORD COMMAND LINE, SUBMENU AREA
  148.    @ 21,0 CLEAR
  149.    DO CASE
  150. * ADD NEW CASE OR EDIT DISPLAYED CASE
  151.       CASE REQUEST="A".OR.REQUEST="E"
  152. * IN ADD MODE, APPEND A BLANK RECORD FOR THE DATA AND POSITION TO THAT RECORD
  153.          IF REQUEST="A"
  154.             @ 19,6 SAY "*** PRESS 'C' TO CONTINUE ADDING NEW RECS, ANYTHING ;
  155. ELSE TO QUIT"
  156.             APPEND BLANK
  157.             STORE RECCNT+1 TO RECCNT
  158.             GO RECCNT
  159.          ELSE
  160.             @ 19,6 SAY "******** PRESS ANY KEY TO FINISH EDIT AND RETURN TO ;
  161. SUBMENU     "
  162.          ENDIF
  163.          @ 21,10 SAY "Enter data at cursor position. Move among fields with"
  164.          @ 22,10 SAY "cursor control keys. Press ENTER to move to next field."
  165.          @ 23,10 SAY "Press ENTER alone to leave field unchanged."
  166. * SET FLAG TO CAUSE NEW DATA TO BE READ
  167.          STORE "Y" TO DATAIN
  168. * TOGGLE DELETE FLAG. * FUNCTION CHECKS IF RECORD NOW FLAGGED AS DELETED
  169.       CASE REQUEST="D"
  170.          IF DELETE()
  171.             RECALL
  172.          ELSE
  173.             DELETE
  174.          ENDIF
  175. * PREVIOUS RECORD IN ACTIVE INDEX SEQUENCE
  176.       CASE REQUEST="P"
  177.          SKIP -1
  178. * NEXT 3 LINES SECURE THE BACKWARD LOOP
  179.          IF BOF()
  180.             GO BOTTOM
  181.          ENDIF
  182. * NEXT RECORD IN ACTIVE INDEX SEQUENCE
  183.       CASE REQUEST="N"
  184.          SKIP +1
  185. * NEXT THREE LINES SECURE THE FORWARD LOOP
  186.          IF EOF()
  187.             GO TOP
  188.          ENDIF
  189. * GET SEARCH VALUE FOR INDEXED SEARCH
  190.       CASE REQUEST="F"
  191. * USE MACRO DEFINING INDEX ENTRIES FROM DATA FIELDS
  192.          STORE "DI"+LIVE_IX TO IXDEF
  193.          STORE &IXDEF TO SV
  194.          STORE &SV TO SV
  195.          @ 21,1 SAY ;
  196.          "ENTER SEARCH VALUE. VALUE NOW SHOWN IS FROM DISPLAYED RECORD. PRESS"
  197.          @ 22,1 SAY "CTRL-Y TO CLEAR " GET SV
  198.          READ
  199. * REMOVE TRAILING BLANKS BEFORE SEARCH
  200.          STORE TRIM(SV) TO SEARCH
  201. * IF RECORD IS NOT FOUND DISPLAY STAYS AT CURRENT RECORD
  202. * NEXT LINE TO KEEP TRACK OF CURRENT RECNO() FOR TEST BELOW
  203.          STORE  RECNO() TO NOW
  204.          SEEK SEARCH
  205. * NEXT 3 LINES KEEP PRESENT RECORD DISPLAYED IF NO FIND.
  206.          IF EOF()
  207.             GOTO NOW
  208.          ENDIF
  209. * CHANGE INDEX
  210.       CASE REQUEST="K"
  211.          STORE RECNO() TO RECNOW
  212.          STORE " " TO IXCHOICE
  213. * SETUP MENU OF INDEX NAMES, PROVIDE IF CLAUSE FOR EACH INDEX                *
  214.          @ 21,9 SAY " "
  215.          STORE 1 TO COUNT
  216.          DO WHILE COUNT<=IXCOUNT
  217.             STORE "IX"+CHR(64+COUNT) TO TEMP
  218.             IF IXCOUNT>1
  219.                ?? CHR(64+COUNT)+". "+SUBSTR(&TEMP,1,AT(",",&TEMP)-1)+" "
  220.             ELSE
  221.                ?? CHR(64+COUNT)+". "+&TEMP
  222.             ENDIF
  223.             STORE COUNT+1 TO COUNT
  224.          ENDDO
  225.          @ 22,10 SAY "Press letter of desired key " GET IXCHOICE
  226.          READ
  227.          STORE UPPER(IXCHOICE) TO IXCHOICE
  228.          IF IXCHOICE>="A".AND.IXCHOICE<=CHR(64+IXCOUNT)
  229.             STORE "IX"+IXCHOICE TO LIVE_IX
  230.             STORE &LIVE_IX TO TEMP
  231.             SET INDEX TO &TEMP
  232.          ENDIF
  233. * GOTO THIS RECORD TO ACTIVATE INDEX
  234.          IF RECNOW>0
  235.             GO RECNOW
  236.          ELSE
  237.             GO BOTTOM
  238.          ENDIF
  239.    ENDCASE
  240. ENDDO
  241. * FALL OUT OF DO WHEN 'M' IS REQUEST, RETURN TO SUBSYSTEM'S MENU
  242. CLEAR
  243. RETURN
  244.